package com.atguigu.jedis.demos;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.util.HashSet;

/**
 *      客户端一定希望连接Master(才能读和写)
 *      客户端如何知道谁是master？
 *              哨兵知道
 *              请求哨兵，让哨兵返回当前的master连接即可
 * Created by Smexy on 2022/5/20
 */
public class SentinelModeDemo {

    public static void main(String[] args) {

        //连接池的配置对象
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

        jedisPoolConfig.setMaxTotal(50);

        jedisPoolConfig.setMaxIdle(30);

        jedisPoolConfig.setMinIdle(10);

        //借连接时，检查是否是好的，是好的再给客户端
        jedisPoolConfig.setTestOnBorrow(true);

        //客户端换连接时，检查，是好的，再入池
        jedisPoolConfig.setTestOnReturn(true);

        //用自己的配置，构建哨兵模式的连接池
        /*
                (String masterName： 参考哨兵的配置文件
                        sentinel monitor masterName 127.0.0.1 6379 1

                Set<String> sentinels： 配置哨兵的地址，可以配置多个哨兵地址也可只写一个
                 GenericObjectPoolConfig poolConfig)
         */
        HashSet<String> sentinels = new HashSet<>();

        sentinels.add("hadoop104:6382");

        JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster", sentinels, jedisPoolConfig);

        // 从池中获取(借)一个Jedis连接
        Jedis jedis = jedisSentinelPool.getResource();

        //写 set
        jedis.set("haha","xixi");

        //读 get
        String response = jedis.get("haha");

        //读一个不存在的key,返回值为null，不是""
        String response1 = jedis.get("afeaefaefa");

        System.out.println(response);
        System.out.println(response1);

        // 将连接还到池中
        jedis.close();

    }
}
